package cn.stu.cms.service;

import cn.stu.cms.dto.ChangePwdDto;
import cn.stu.cms.dto.LoginDto;
import cn.stu.cms.dto.PageDto;
import cn.stu.cms.dto.UserSaveDto;
import cn.stu.cms.pojo.Users;
import cn.stu.cms.util.R;
import cn.stu.cms.vo.EmployeeData;
import cn.stu.cms.vo.UsersVo;
import cn.stu.cms.vo.routes.GetMenuVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * (Users)表服务接口
 *
 * @author gh
 * @since 2023-07-21 17:11:52
 */
public interface UsersService extends IService<Users> {


    /**
     * 通过主键删除数据
     *
     * @param userId 主键
     * @return 是否成功
     */
    R<Boolean> deleteById(Long userId);

    /**
     * 登录
     *
     * @param loginDto 登录数据到
     * @return {@link R}
     */
    R<String> login(LoginDto loginDto);

    /**
     * 查询页面
     *
     * @param page 页面
     * @param dto  DTO
     * @return {@link R}<{@link Page}<{@link UsersVo}>>
     */

    R<Page<UsersVo>> queryPage(PageDto<UsersVo> page, UserSaveDto dto);

    /**
     * 添加
     *
     * @param userSaveDto 用户将数据保存到
     * @return {@link R}<{@link Boolean}>
     */
    R<Boolean> add(UserSaveDto userSaveDto);

    /**
     * 编辑
     *
     * @param userSaveDto 用户将数据保存到
     * @return {@link R}<{@link Boolean}>
     */
    R<Boolean> edit(UserSaveDto userSaveDto);

    /**
     * 按ID查询
     *
     * @param userId 用户ID
     * @return {@link R}<{@link UsersVo}>
     */
    R<UsersVo> queryById(Long userId);

    /**
     * 更改PWD
     *
     * @param changePwdDto 将密码日期更改为
     * @return {@link R}<{@link Boolean}>
     */
    R<Boolean> changePwd(ChangePwdDto changePwdDto);

    /**
     * 获取路由
     *
     * @param roleId 角色ID
     * @return {@link R}<{@link List}<{@link GetMenuVo}>>
     */
    R<List<GetMenuVo>> getRoutes(Long roleId);

    /**
     * 获取组ID
     *
     * @return {@link Long}
     */
    EmployeeData getEmployeeData();

}
